import { defineConfig, loadEnv } from "vite";
import react from "@vitejs/plugin-react";
// import path from "path";
import { resolve } from "path";

export default defineConfig(({ mode, command }) => {
  // vite 中不支持 import.mete.env，环境变量通常从 process 获得。使用 Vite 导出的 loadEnv 函数来加载指定的 .env 文件===loadEnv(mode, process.cwd())
  const ENV_CONFIG = loadEnv(mode, process.cwd());
  const isProd = command === "build";

  return {
    plugins: [react()],
    // qiankun 子应用配置
    define: {
      // 在开发环境设置全局变量，标识是否在 qiankun 环境中
      "process.env.__IS_QIANKUN__": JSON.stringify(!!process.env.VITE_QIANKUN),
    },
    css: {
      preprocessorOptions: {
        less: {
          javascriptEnabled: true, // 支持内联 JavaScript
          modifyVars: {
            "primary-color": "#ff0000", // 设置主题样式 全局主色  使用关键字@
          },
        },
      },
    },
    //base 配置项用于指定应用在生产环境中的路径前缀。例如，如果你的应用部署在服务器的 /subpath/ 路径下，那么你需要将 base 设置为 '/subpath/'。
    base: command === "serve" ? "/" : ENV_CONFIG.VITE_BASE_URL || "/", // 根据环境设置不同打包路径；使用这个loadEnv(mode, process.cwd())来获取环境变量
    build: {
      outDir: "dist", //指定构建输出文件的目录，默认为 dist
      assetsDir: "assets", //指定静态资源（如图片、字体等）的输出目录
      assetsInlineLimit: 4096, //小于此大小的静态资源会被内联为 base64 格式，默认为 4096 字节
      minify: "esbuild", // 'terser' 或者 false 选择压缩工具 (esbuild 或 terser)，或者禁用压缩。
      cssCodeSplit: true, //启用或禁用 CSS 代码拆分，默认为 true***不懂***
      sourcemap: false, // 是否生成 sourcemap 文件，默认为 false***不懂***
      rollupOptions: {
        // Vite 会自动处理入口，不需要手动设置 input
        // qiankun 会从构建后的 HTML 中提取入口脚本
      },
      manifest: false, //是否生成 manifest 文件，默认为 false***不懂***
      ssrManifest: false, //是否生成用于服务器端渲染（SSR）的 manifest 文件，默认为 false。***不懂***
      target: "modules", //设置构建目标，例如 esnext、modules 等***不懂***
    },
    resolve: {
      // 路径别名配置
      alias: {
        "@": resolve(__dirname, "src"), // 将 @ 指向 src 目录
        // "@": path.resolve(import.meta.dirname, "src"),
      },
    },
    server: {
      port: 5173, //指定开发服务器端口，默认为 3000
      open: "/#/home", //是否在开发服务器启动时自动打开浏览器，默认为 false
      cors: true, // 启用 CORS，支持 qiankun 主应用跨域访问
      headers: {
        "Access-Control-Allow-Origin": "*", // 允许所有来源访问
      },
      // 使用代理时，接口必须是本地服务？？？
      // proxy: {
      //   "/coupon-config": {
      //     target: "http://172.20.52.110/coupon-admin-api",
      //     changeOrigin: true,
      //     // 开发环境VIte配置了proxy，在控制台看不到实际请求的URL
      //     // 可以在proxy使用byPass()
      //     // 因为无法将其添加到请求头中，使用加到响应头方便查看
      //     bypass(req: any, res: any, options: any) {
      //       const proxyURL = options.target + options.rewrite(req.url);
      //       console.log("proxyURL", proxyURL);
      //       req.headers["x-req-proxyURL"] = proxyURL; // 设置未生效
      //       res.setHeader("x-req-proxyURL", proxyURL); // 设置响应头可以看到
      //     },
      //     rewrite: (path: string) => path.replace(/^\/coupon-admin-api/, ""),
      //   },
      // },
    },
  };
});
